package generic01;

/**
 * 类上泛型:
 *    格式:
 *       class 类名<E,Q,A,...>{//泛型变量
 *          一旦在类上定义泛型,类中均可以使用定义的泛型变量
 *       }
 *
 *       如果不指定泛型变量的类型,那么这个泛型变量会被替换成Object类型
 */
public class GenericDemo02<Q> {// Q=String
    public void method(Q q) {//Q是泛型变量
                             //q是变量名
        System.out.println(q);
    }

    public static void main(String[] args) {
        GenericDemo02<String> gd1 = new GenericDemo02<String>(); //在声明对象的时候通过<>指定类型,这个类型必须是引用类型
                                                                 //<String>相当于将String这个类型传递给了类上Q
                                                               //类上的泛型变量一旦有值,那么类中所有用到Q的地方都会被替换成String
                                                              //method(Q q) => method(String q)
        gd1.method("abc");//abc



        GenericDemo02<Integer> gd2 = new GenericDemo02<Integer>(); //<Integer>相当于将Integer这个类型传递给了类上Q
                                                                //类上的泛型变量一旦有值,那么类中所有用到Q的地方都会被替换成Integer
                                                             //method(Q q) => method(Integer q)
        gd2.method(13);//13


        GenericDemo02 gd3 = new GenericDemo02();//如果不指定泛型变量的类型,那么这个泛型变量会被替换成Object类型
        gd3.method(1.3);

        //GenericDemo02<int> gd1 = new GenericDemo02<int>();
    }
}
